home *** CD-ROM | disk | FTP | other *** search
- 1000 '
- 1010 '
- 1020 ' <<<<< P C - C O D E 2 >>>>>
- 1030 '
- 1040 '
- 1050 ' * * * * * * * * * * * * * * * * * * * *
- 1060 ' * *
- 1070 ' * COPYRIGHT in Public Domain 1983 *
- 1080 ' * by Richard N. Colvard *
- 1090 ' * *
- 1100 ' * WARNING: This Program must be *
- 1110 ' * Compiled with IBM *
- 1120 ' * BASCOM/T/O *
- 1130 ' * Donot use BASICA *
- 1140 ' * *
- 1150 ' * Highly recommend 8087 link libs *
- 1160 ' * *
- 1170 ' * * * * * * * * * * * * * * * * * * * *
- 1180 '
- 1190 '
- 1200 DIM B#(11), C#(47), CONS!(7), IX%(255)
- 1210 CONS!(1)=8: CONS!(2)=131072! : CONS!(3)=8192: CONS!(4)=128
- 1220 CONS!(5)=2: CONS!(6)=32 : CONS!(7)=2048
- 1230 M%=7: N%=13: YY! = 999991! : MU# = 16807 : MD# = 2147483647#
- 1240 W1$="12345678901234567890123456789012345678901234567890123456789012345678"
- 1250 W2$=" 1 2 3 4 5 6"
- 1260 W3$=".........+.........+.........+.........+.........+.........+........"
- 1270 WH$="V1.37 PC-CODE2"
- 1280 WZ$="P C C o m p u t e r S e c u r i t y " + WH$
- 1290 HDR$=WH$ + " ENCODED " + DATE$ + " " + TIME$
- 1300 SCREEN 0,1
- 1310 COLOR 15,9,1
- 1320 CLS
- 1330 FOR J%=10 TO 15
- 1340 COLOR J%,9,1
- 1350 PRINT "P C - C O D E 2 ......Textual SuperEncipherment......"
- 1360 NEXT J%
- 1370 COLOR 15,9,1
- 1380 PRINT " "
- 1390 PRINT " "
- 1400 PRINT " ": PRINT " "
- 1410 PRINT " ": PRINT " "
- 1420 PRINT " Enter the type of KEY desired"
- 1430 PRINT " Numeric; Number Only key ";
- 1440 COLOR 13,0,0: PRINT "N" : COLOR 15,9,1
- 1450 PRINT " Alphabetic; alphanumeric ";
- 1460 COLOR 13,0,0: PRINT "A" : COLOR 15,9,1
- 1470 INPUT " Enter N or A ", T$
- 1480 T$=LEFT$(T$,1)
- 1490 IF T$="a" THEN T$="A"
- 1500 IF T$="n" THEN T$="N"
- 1510 IF T$ <> "A" AND T$ <> "N" THEN 1470
- 1520 IF T$="N" THEN 1570
- 1530 IF T$="A" THEN 3510
- 1540 '
- 1550 '
- 1560 '
- 1570 CLS
- 1580 PRINT WZ$
- 1590 PRINT " "
- 1600 PRINT " "
- 1610 PRINT " There are two(2) levels of Security HIGH and LOW"
- 1620 INPUT " Enter H for HIGH or L for LOW ", A$
- 1630 A$=LEFT$(A$,1)
- 1640 IF A$ <> "H" AND A$ <> "h" AND A$ <> "L" AND A$ <> "l" THEN 1600
- 1650 IF A$ = "H" OR A$ = "h" THEN 1780
- 1660 '
- 1670 ' ----------- LOW level of SECURITY -------------
- 1680 '
- 1690 PRINT " LOW Level of Security Selected"
- 1700 PRINT " "
- 1710 PRINT " You must now enter SEVEN (7) KEY numbers as indicated:"
- 1720 PRINT " "
- 1730 GOSUB 3720
- 1740 GOTO 2320
- 1750 '
- 1760 '
- 1770 '
- 1780 PRINT " "
- 1790 PRINT " You have Selected HIGH security"
- 1800 PRINT " "
- 1810 PRINT " You must enter ";1+N%+M%;" key numbers between 1 and 2,147,483,646"
- 1820 INPUT " A(1) ? ", A#
- 1830 IF A# < 1 OR A# >= MD# THEN GOSUB 2170: GOTO 1820
- 1840 PRINT " "
- 1850 '
- 1860 '
- 1870 FOR J%=1 TO M%
- 1880 PRINT " B(";J%;") ";
- 1890 INPUT B#(J%)
- 1900 IF B#(J%) < 1 OR B#(J%) >= MD# THEN GOSUB 2170: GOTO 1880
- 1910 NEXT J%
- 1920 CLS
- 1930 '
- 1940 '
- 1950 FOR J%=1 TO N%
- 1960 PRINT " C(";J%;") ";
- 1970 INPUT C#(J%)
- 1980 IF C#(J%) < 1 OR C#(J%) >= MD# THEN GOSUB 2170: GOTO 1960
- 1990 IF J% = 18 THEN CLS
- 2000 IF J% = 36 THEN CLS
- 2010 NEXT J%
- 2020 '
- 2030 GOTO 2320
- 2040 '
- 2050 '
- 2060 '
- 2070 PRINT "[";X%;"] ";
- 2080 INPUT "Enter a NUMBER between 1 and 9,999,999 ", K2!
- 2090 IF K2! < 1 OR K2! > 9999999! THEN GOSUB 2170: GOTO 2070
- 2100 Z!=K2!
- 2110 GOSUB 2260
- 2120 S!=Z!
- 2130 RETURN
- 2140 '
- 2150 '
- 2160 ' ---------- ERROR Messages ----------
- 2170 BEEP
- 2180 COLOR 4+16,0,0
- 2190 PRINT " ERROR: Number RANGE must be 1 to 9,999,999"
- 2200 COLOR 15,1,9
- 2210 BEEP
- 2220 RETURN
- 2230 '
- 2240 '
- 2250 ' ------ scaling ---------
- 2260 Z! = Z! / 100!
- 2270 IF Z! > 1! THEN 2260
- 2280 RETURN
- 2290 '
- 2300 '
- 2310 '
- 2320 CLS
- 2330 PRINT WZ$
- 2340 PRINT " ": PRINT " ": PRINT " "
- 2350 PRINT "Possible Output files:"
- 2360 PRINT " 'A:FILE.EXT' 'B:FILE.EXT' 'LPT1:' 'CON:' 'CAS1:'"
- 2370 PRINT " "
- 2380 INPUT "Enter Output file name (Full name): ", U$
- 2390 IF U$ = "con:" THEN U$="CON:"
- 2400 IF U$ <> "CON:" THEN OPEN "O",2,U$
- 2410 PRINT " ": PRINT " "
- 2420 PRINT "Possible Input files:"
- 2430 PRINT " 'A:FILE.EXT' 'B:FILE.EXT' 'C:FILE.EXT' 'CON:' 'CAS1:'"
- 2440 PRINT " "
- 2450 INPUT "Enter Input FILE (full name): ", F1$
- 2460 IF F1$= "con:" THEN F1$="CON:"
- 2470 IF F1$ <> "CON:" THEN OPEN "I",1,F1$
- 2480 PRINT " "
- 2490 PRINT " "
- 2500 INPUT "Encode or Decode (E or D) ",EN$
- 2510 EN$=LEFT$(EN$,1)
- 2520 IF EN$ = "e" THEN EN$="E"
- 2530 IF EN$ = "d" THEN EN$="D"
- 2540 IF EN$ <> "D" AND EN$ <> "E" THEN 2500
- 2550 IF EN$="E" AND U$ <> "CON:" THEN PRINT #2, HDR$
- 2560 IF EN$ <> "D" THEN 2630
- 2570 IF F1$="CON:" THEN 2630
- 2580 LINE INPUT #1, HDR$
- 2590 IF LEFT$(HDR$,14) = WH$ THEN 2630
- 2600 PRINT "* * * File was never Encoded by "; WH$
- 2610 PRINT " file header = ", HDR$
- 2620 END
- 2630 CLS: PRINT WZ$: PRINT " ": PRINT " "
- 2640 COLOR 4+16,0,0
- 2650 PRINT " * * * R U N N I N G * * *"
- 2660 COLOR 15,9,1
- 2670 PRINT " "
- 2680 IF F1$="CON:" THEN PRINT "--> Terminate Console Input with use '//END'"
- 2690 IF EN$="D" AND F1$ <> "CON:" THEN PRINT "File Header: "; HDR$
- 2700 PRINT " "
- 2710 IF F1$ = "CON:" THEN 2750
- 2720 IF EOF(1) <> 0 THEN 3280
- 2730 LINE INPUT #1, M$
- 2740 GOTO 2770
- 2750 LINE INPUT M$
- 2760 IF M$ = "//END" OR M$ = "//end" THEN 3280
- 2770 L%=LEN(M$)
- 2780 IF L% = 0 THEN 3080
- 2790 FOR JJ%=1 TO L%
- 2800 IX%(JJ%)=JJ%
- 2810 NEXT JJ%
- 2820 L9%=INT(L%/2)
- 2830 GOSUB 5460
- 2840 IF EN$="D" THEN GOSUB 5670
- 2850 FOR J%=1 TO L%
- 2860 H%=ASC( MID$(M$,J%,1))
- 2870 H% = H% - 32
- 2880 S#=A#
- 2890 L=M%
- 2900 GOSUB 3140
- 2910 A#=S#
- 2920 B%=O%
- 2930 L=N%
- 2940 S#=B#(B%)
- 2950 GOSUB 3140
- 2960 B#(B%)=S#
- 2970 B%=O%
- 2980 S#=C#(B%)
- 2990 L=95 : L2 = 2 * L
- 3000 GOSUB 3140
- 3010 C#(B%)=S#
- 3020 IF EN$="E" THEN H% = H% + O%
- 3030 IF EN$="D" THEN H% = L2 + (H% - O%)
- 3040 H%= H% - (L * INT(H%/L))
- 3050 MID$(M$,J%,1)=CHR$(H% + 32)
- 3060 NEXT J%
- 3070 IF EN$="E" THEN GOSUB 5670
- 3080 IF U$ <> "CON:" THEN PRINT #2, M$
- 3090 IF U$ = "CON:" THEN PRINT M$ : PRINT " "
- 3100 GOTO 2710
- 3110 '
- 3120 '
- 3130 ' -------- RANDOM NUMBER GENERATOR (1) ------
- 3140 S#=S# * MU#
- 3150 S#=S# - (MD# * INT(S# / MD#) )
- 3160 O%=1 + FIX(L * (S# / MD#) )
- 3170 RETURN
- 3180 '
- 3190 '
- 3200 ' -------- RANDOM NUMBER GENERATOR (2) ------
- 3210 S!=(S! + 1.352968) ^ 1.256973
- 3220 S!=S! - FIX(S!)
- 3230 O%=1 + FIX(L * S!)
- 3240 RETURN
- 3250 '
- 3260 '
- 3270 '
- 3280 PRINT " "
- 3290 IF U$ <> "CON:" THEN CLOSE 2
- 3300 IF F1$ <> "CON:" THEN CLOSE 1
- 3310 IF U$="CON:" THEN INPUT " ---Pause--- Press Enter when finished", M$
- 3320 '
- 3330 '
- 3340 ' ------- CLEAR MEMORY & STOP --------
- 3350 Z!=0: A#=0: M$=SPACE$(128): S! = 0 : S# = 0
- 3360 FOR J%=1 TO M%
- 3370 B#(J%)=0
- 3380 NEXT J%
- 3390 FOR J%=1 TO N%
- 3400 C#(J%)=0
- 3410 NEXT J%
- 3420 FOR J%=1 TO 128
- 3430 IX%(J%)=0
- 3440 NEXT J%
- 3450 COLOR 15,0,0
- 3460 CLS
- 3470 END
- 3480 '
- 3490 ' ----------- ALPHANUMERIC KEYS -----------
- 3500 '
- 3510 CLS
- 3520 PRINT WZ$
- 3530 PRINT " "
- 3540 PRINT " "
- 3550 PRINT " There are two(2) levels of Security HIGH and LOW"
- 3560 INPUT " Enter H for HIGH or L for LOW ", A$
- 3570 A$=LEFT$(A$,1)
- 3580 IF A$ <> "H" AND A$ <> "h" AND A$ <> "L" AND A$ <> "l" THEN 3540
- 3590 IF A$ = "H" OR A$ = "h" THEN 4800
- 3600 '
- 3610 ' ----------- LOW level of SECURITY -------------
- 3620 '
- 3630 PRINT " LOW Level of Security Selected"
- 3640 PRINT " "
- 3650 PRINT " You must now enter SEVEN (7) key Alphanumerics as indicated:"
- 3660 PRINT " "
- 3670 GOSUB 3720
- 3680 GOTO 2320
- 3690 '
- 3700 '
- 3710 ' ---------- KEY 1 ---------
- 3720 X%=1 : M% = 11 : N% = 47
- 3730 IF T$ = "A" THEN GOSUB 4930
- 3740 IF T$ = "N" THEN GOSUB 2070
- 3750 GOSUB 3210
- 3760 GOSUB 3210
- 3770 A#=FIX((1# - S!) * MD#)
- 3780 '
- 3790 '
- 3800 ' ---------- KEY 2 ----------
- 3810 X%=2
- 3820 IF T$ = "A" THEN GOSUB 4930
- 3830 IF T$ = "N" THEN GOSUB 2070
- 3840 GOSUB 3210
- 3850 L=4
- 3860 FOR J%=1 TO M%
- 3870 GOSUB 3210
- 3880 O2% = O%
- 3890 FOR K%=1 TO O2%
- 3900 GOSUB 3210
- 3910 NEXT K%
- 3920 GOSUB 3210
- 3930 B#(J%)=FIX((1# - S!) * MD#)
- 3940 NEXT J%
- 3950 '
- 3960 '
- 3970 ' ---------- KEY 3 -----------
- 3980 X%=3
- 3990 IF T$ = "A" THEN GOSUB 4930
- 4000 IF T$ = "N" THEN GOSUB 2070
- 4010 GOSUB 3210
- 4020 L=3
- 4030 FOR J%=1 TO N%
- 4040 GOSUB 3210
- 4050 O2% = O%
- 4060 FOR K%=1 TO O2%
- 4070 GOSUB 3210
- 4080 NEXT K%
- 4090 GOSUB 3210
- 4100 C#(J%)=FIX((1# - S!) * MD#)
- 4110 NEXT J%
- 4120 '
- 4130 '
- 4140 ' ---------- KEY 4 -------------
- 4150 X%=4
- 4160 IF T$ = "A" THEN GOSUB 4930
- 4170 IF T$ = "N" THEN GOSUB 2070
- 4180 GOSUB 3210
- 4190 L=INT(N%/2)
- 4200 GOSUB 3210
- 4210 K%=O% + 1
- 4220 L=N%
- 4230 FOR J%=1 TO K%
- 4240 GOSUB 3210
- 4250 L%=O%
- 4260 GOSUB 3210
- 4270 C#(L%)=FIX(S! * MD#)
- 4280 NEXT J%
- 4290 '
- 4300 '
- 4310 ' ----------- KEY 5 ---------------
- 4320 X%=5
- 4330 IF T$ = "A" THEN GOSUB 4930
- 4340 IF T$ = "N" THEN GOSUB 2070
- 4350 GOSUB 3210
- 4360 L=INT(M%/2)
- 4370 GOSUB 3210
- 4380 K%=O% + 1
- 4390 L=M%
- 4400 FOR J%=1 TO K%
- 4410 GOSUB 3210
- 4420 L%=O%
- 4430 GOSUB 3210
- 4440 B#(L%)=FIX(S! * MD#)
- 4450 NEXT J%
- 4460 '
- 4470 '
- 4480 ' ------------ KEY 6 ---------------
- 4490 X%=6
- 4500 IF T$ = "A" THEN GOSUB 4930
- 4510 IF T$ = "N" THEN GOSUB 2070
- 4520 GOSUB 3210
- 4530 L=M%
- 4540 FOR J%=1 TO M%
- 4550 GOSUB 3210
- 4560 D#=B#(O%)
- 4570 B#(O%)=B#(J%)
- 4580 B#(J%)=D#
- 4590 NEXT J%
- 4600 '
- 4610 '
- 4620 ' ------------- KEY 7 --------------
- 4630 X%=7
- 4640 IF T$ = "A" THEN GOSUB 4930
- 4650 IF T$ = "N" THEN GOSUB 2070
- 4660 GOSUB 3210
- 4670 L=N%
- 4680 FOR J%=1 TO N%
- 4690 GOSUB 3210
- 4700 D#=C#(O%)
- 4710 C#(O%)=C#(J%)
- 4720 C#(J%)=D#
- 4730 NEXT J%
- 4740 '
- 4750 RETURN
- 4760 '
- 4770 ' ---------- end of LOW security ------------
- 4780 '
- 4790 '
- 4800 CLS
- 4810 PRINT " You must enter 3 long PASSWORDS of alphanumeric data"
- 4820 X%=1
- 4830 GOSUB 5110
- 4840 X%=M%
- 4850 GOSUB 5110
- 4860 X%=N%
- 4870 GOSUB 5110
- 4880 '
- 4890 GOTO 2320
- 4900 '
- 4910 '
- 4920 ' --------- alphanumeric password to RND ------------
- 4930 PRINT "[";X%;"] Enter Password: ";
- 4940 LINE INPUT P$
- 4950 L%=LEN(P$)
- 4960 IF L% < 6 THEN PRINT " *** password too short; not > 5": GOTO 4930
- 4970 IF X%=1 THEN K! = 1
- 4980 FOR J%=1 TO L%
- 4990 C%=ASC( MID$(P$,J%,1) )
- 5000 LL%=L%
- 5010 IF LL% > 7 THEN LL%= LL% - (7 * INT(LL%/7)): LL%=LL%+1
- 5020 K! = ABS(K! + (CONS!(LL%) * C%) )
- 5030 NEXT J%
- 5040 Z! = K!
- 5050 GOSUB 2250
- 5060 S! = Z!
- 5070 RETURN
- 5080 '
- 5090 '
- 5100 ' ------- alphanumeric to DECIMAL --------
- 5110 X2%=X% * 5
- 5120 IF X%=1 THEN PRINT " (A) Enter Password of at least (MIN) ";X2%;" Chars"
- 5130 IF X%=M% THEN PRINT " (B) Enter Password of at least (MIN) ";X2%;" Chars"
- 5140 IF X%=N% THEN PRINT " (C) Enter Password of at least (MIN) ";X2%;" Chars"
- 5150 PRINT " "
- 5160 PRINT " "; LEFT$(W2$,X2%)
- 5170 PRINT " "; LEFT$(W1$,X2%)
- 5180 PRINT " "; LEFT$(W3$,X2%)
- 5190 PRINT "Password:";
- 5200 LINE INPUT P$
- 5210 PRINT " "
- 5220 L%=LEN(P$)
- 5230 IF L% < X2% THEN PRINT " *** Password TOO SHORT reenter ": GOTO 5110
- 5240 T%=INT(L%/X%)
- 5250 IF X%=1 THEN K#=1
- 5260 FOR K%=1 TO X%
- 5270 P2$=LEFT$(P$,T%)
- 5280 IF L% < 1 THEN 5400
- 5290 P$=MID$(P$,T%+1,L%)
- 5300 L%=L%-T%
- 5310 FOR J%=1 TO T%
- 5320 LL%=J%
- 5330 IF LL% > 7 THEN LL%= LL% - (7 * INT(LL%/7)): LL%=LL%+1
- 5340 K# = K# + (CONS!(LL%) * C%)
- 5350 NEXT J%
- 5360 IF X%=1 THEN A#=K#
- 5370 IF X%=M% THEN B#(K%) = K#
- 5380 IF X%=N% THEN C#(K%) = K#
- 5390 K# = K# - (MD# * INT( K# / MD# ))
- 5400 NEXT K%
- 5410 RETURN
- 5420 '
- 5430 '
- 5440 ' ------ TRANSPOSITION -------
- 5450 '
- 5460 FOR JJ%=1 TO L9%
- 5470 L=M%
- 5480 S#=A#
- 5490 GOSUB 3140
- 5500 A#=S#
- 5510 B%=O%
- 5520 L=N%
- 5530 S#=B#(B%)
- 5540 GOSUB 3140
- 5550 B#(B%)=S#
- 5560 B%=O%
- 5570 S#=C#(B%)
- 5580 L=L%
- 5590 GOSUB 3140
- 5600 C#(B%)=S#
- 5610 SWAP IX%(JJ%),IX%(O%)
- 5620 NEXT JJ%
- 5630 RETURN
- 5640 '
- 5650 '
- 5660 '
- 5670 FOR JJ%=1 TO L9%
- 5680 G1%=IX%(JJ%)
- 5690 G2%=IX%(JJ%+L9%)
- 5700 G1$=MID$(M$,G1%,1)
- 5710 G2$=MID$(M$,G2%,1)
- 5720 SWAP G1$,G2$
- 5730 MID$(M$,G1%,1)=G1$
- 5740 MID$(M$,G2%,1)=G2$
- 5750 NEXT JJ%
- 5760 RETURN
- 5770 '
- 5780 '
- 5790 '
- 5800 END
- SWAP G1$,G2$
- 5730 MID$(M$,G1%,1)=G1$
- 5740 MID$(M$,G2%,1)=G2$
- 5750 NEXT JJ%
- 5760 R